package org.lanqiao.tjut.model;

import java.util.ArrayList;
import java.util.Date;
import java.util.List;

import org.apache.commons.dbutils.handlers.BeanHandler;
import org.apache.commons.dbutils.handlers.BeanListHandler;
import org.lanqiao.tjut.bean.TBStudentBean;
import org.lanqiao.tjut.db.DBFactory;
import org.lanqiao.tjut.myUtils.MyUtils;

public class StudentModel {

	/**
	 * 根据ID主键删除学生信息
	 * @param stuId
	 *           主键  
	 * @return 
	 *        删除操作的结果
	 */
	public int  deleteStudentIdInfoById(String stuId) {
		int re_i = 0;
		//删除操作sql
		/*
		 * 逻辑删除：使用update修改标志为字段即可
		 * 物理删除：使用delete语句进行删除操作
		 * 注意：两种语句都要使用条件where，否则将删除整张表的数据
		 */
		String sbSql = "update TBSTUDENT set isdeleted = 1 where stu_id=? ";
		// 查询sql参数集
		List<Object> lstParas = new ArrayList<>();
		lstParas.add(stuId);
		// 调用db层进行参数查询
		// 调用db层进行数据查询操作
		re_i=DBFactory.getDBDriverInstance().update(sbSql.toString(), lstParas.toArray());
		return re_i;
	}
	/**
	 * 根据ID主键参数查询学生信息
	 * @param stuId
	 *           主键  
	 * @return
	 */
	public TBStudentBean getStudentIdInfoById(String stuId) {
		TBStudentBean stuB = null;
		String sbSql = "select * from TBSTUDENT where isdeleted = 0 and stu_id=? ";
		// 查询sql参数集
		List<Object> lstParas = new ArrayList<>();
		lstParas.add(stuId);
		// 调用db层进行参数查询
		// 调用db层进行数据查询操作
		stuB = DBFactory.getDBDriverInstance().query(sbSql.toString(), 
				new BeanHandler<>(TBStudentBean.class),
				lstParas.toArray());
		return stuB;
	}

	/**
	 * 保存或修改学生信息
	 * 
	 * @param stuB
	 *            学生信息的表单数据
	 * @return 修改保存的结果集的记录条数
	 */
	public int saveOrUpdateStudentInfo(TBStudentBean stuB) {
		// 默认返回值
		int re_i = 0;
		//数据库操作sql语句
		StringBuilder sbSql = new StringBuilder();
		//数据库操作sql语句参数集合
		List<Object> lstParas = new ArrayList<>();
		//根据主键字段是否为null来确定，数据库操作是新增还是修改
		if(stuB!=null&&stuB.getStu_id() == null){
			//新增操作
			//新增操作的sql语句
			sbSql.append("insert into tbstudent(stu_name,stu_sex,stu_birthday,stu_address,stu_tel,stu_img,stu_department) "
					+ "values(?,?,to_date(?,'yyyy-mm-dd hh24:mi:ss'),?,?,?,?)");
			//添加sql参数
			lstParas.add(stuB.getStu_name());
			lstParas.add(stuB.getStu_sex());
			lstParas.add(MyUtils.convertDate2String(stuB.getStu_birthday(), "yyyy-MM-dd HH:mm:ss"));
			lstParas.add(stuB.getStu_address());
			lstParas.add(stuB.getStu_tel());
			lstParas.add(stuB.getStu_img());
			lstParas.add(stuB.getStu_department());
		}else{
			String strimg =stuB.getStu_img();
			if(strimg != null && !strimg.equals("") ){
			sbSql.append("update tbstudent set stu_name=?,stu_sex=?,stu_birthday=to_date(?,'yyyy-mm-dd hh24:mi:ss'),stu_address=?,stu_tel=?,stu_img=?,stu_department=? where stu_id=?");
			lstParas.add(stuB.getStu_name());
			lstParas.add(stuB.getStu_sex());
			lstParas.add(MyUtils.convertDate2String(stuB.getStu_birthday(), "yyyy-MM-dd HH:mm:ss"));
			lstParas.add(stuB.getStu_address());
			lstParas.add(stuB.getStu_tel());
			lstParas.add(stuB.getStu_img());
			lstParas.add(stuB.getStu_department());
			lstParas.add(stuB.getStu_id());
			}else{
				sbSql.append("update tbstudent set stu_name=?,stu_sex=?,stu_birthday=to_date(?,'yyyy-mm-dd hh24:mi:ss'),stu_address=?,stu_tel=?,stu_department=? where stu_id=?");
				lstParas.add(stuB.getStu_name());
				lstParas.add(stuB.getStu_sex());
				lstParas.add(MyUtils.convertDate2String(stuB.getStu_birthday(), "yyyy-MM-dd HH:mm:ss"));
				lstParas.add(stuB.getStu_address());
				lstParas.add(stuB.getStu_tel());
				lstParas.add(stuB.getStu_department());
				lstParas.add(stuB.getStu_id());
			}
		}
		
		// 调用数据库层进行数据库保存处理
		re_i = DBFactory.getDBDriverInstance().update(sbSql.toString(), lstParas.toArray());
		return re_i;
	}

	/**
	 * 根据参数查询学生信息
	 * 
	 * @param stuB
	 *            参数实体类
	 * @return 查询结果集
	 */
	public List<TBStudentBean> queryStudentInfoByParas(TBStudentBean stuB) {
		List<TBStudentBean> lstStus = null;
		// 查询sql
		StringBuilder sbSql = new StringBuilder("select * from TBSTUDENT where isdeleted = 0 ");
		// 查询sql参数集
		List<Object> lstParas = new ArrayList<>();
		// 根据查询参数实体类动态拼写查询条件
		if (stuB != null) {
			// 学生姓名 需要使用模糊查询
			String stuName = stuB.getStu_name();
			if (stuName != null && !stuName.equals("")) {
				// 拼写sequel条件
				sbSql.append(" and stu_name like ?");
				// 添加参数
				lstParas.add("%" + stuName + "%");
			}

			// 学生性别查询
			String stuSex = stuB.getStu_sex();
			if (stuSex != null && !stuSex.equals("")) {
				// 拼写sql条件
				sbSql.append(" and stu_sex = ?");
				// 添加参数
				lstParas.add(stuSex);
			}

			// 学生出生日期开始时间
			Date stubirthday = stuB.getStu_birthday();
			if (stubirthday != null) {
				// 拼写sql条件
				sbSql.append(" and stu_birthday >= to_date(?,'yyyy-mm-dd hh24:mi:ss') ");
				// 添加参数
				lstParas.add(MyUtils.convertDate2String(stubirthday, "yyyy-MM-dd HH:mm:ss"));
			}

			// 学生出生日期截止时间
			Date stubirthday2 = stuB.getStu_birthday2();
			if (stubirthday2 != null) {
				// 拼写sql条件
				sbSql.append(" and stu_birthday <= to_date(?,'yyyy-mm-dd hh24:mi:ss') ");
				// 添加参数
				lstParas.add(MyUtils.convertDate2String(stubirthday2, "yyyy-MM-dd HH:mm:ss"));
			}
			// 学生住址需要使用模糊查询
			String stuAddress = stuB.getStu_address();
			if (stuAddress != null && !stuAddress.equals("")) {
				// 拼写sql条件
				sbSql.append(" and stu_address like ?");
				// 添加参数
				lstParas.add("%" + stuAddress + "%");
			}
			// 学生电话需要使用模糊查询
			String stuTel = stuB.getStu_tel();
			if (stuTel != null && !stuTel.equals("")) {
				// 拼写sql条件
				sbSql.append(" and stu_tel like ?");
				// 添加参数
				lstParas.add("%" + stuTel + "%");
			}

			// 学生系别查询
			Integer stuDepartment = stuB.getStu_department();
			if (stuDepartment != null) {
				// 拼写sql条件
				sbSql.append(" and stu_department = ?");
				// 添加参数
				lstParas.add(stuDepartment);
			}
		}
		// 主键字段倒序排序
		sbSql.append(" order by stu_id desc");
		// 调用db层进行数据查询操作
		lstStus = DBFactory.getDBDriverInstance().query(sbSql.toString(), new BeanListHandler<>(TBStudentBean.class),
				lstParas.toArray());
		// 返回查询结果集
		return lstStus;
	}
}
